/**
 * @Title:ICombo.java
 * @Description:
    整体流程：
    initBoard()
    ->Move()
    ->computeCombo()
    ->computeCost()
    ->isEndCondition()
    
 * @author shan
 * @date 2015-4-7 下午10:36:58
 */
package com.shan.ai.combo;

import java.util.List;

import com.shan.ai.combo.IComboConstant.BeadList;
import com.shan.ai.combo.IComboConstant.BeadType;
import com.shan.ai.combo.IComboConstant.Point;

public interface ICombo {
    
    /**
     * 是否满足结束条件
     * @return
     */
    public boolean isEndCondition();
    

    /**
     * 移动动作
     * @param beads 当前局面
     * @return 移动路径
     */
    public List<Point> move(BeadType[][] beads);
    
    /**
     * 根据当前Combo链表，计算价值
     * P1.每多一个Combo，则伤害增加25%
     * P2.每个Combo，每比3串多一串，伤害增加25%
     * 最后伤害是：每种颜色的P2*P1的累加
     * @return
     */
    public double computeCost(List<BeadList>  comboList);
    
    /**
     * 计算当前Combo
     * @param currBeads
     * @return
     */
    public List<BeadList> computeCombo(BeadType[][] currBeads);
    
    /**
     * 初始化局面
     * @return
     */
    public BeadType[][] initBoard();
    

}
